use std::{collections::HashMap, fs::File, io::BufRead};

pub fn converter(input: &str) -> String {
    let file = File::open("kMandarin.txt").unwrap();
    let reader = std::io::BufReader::new(file);
    let mut pinyin_map: HashMap<String, String> = HashMap::new();
    for line in reader.lines() {
        let line = line.unwrap();
        let strs = line.split(':').collect::<Vec<&str>>();
        let unicode = strs[0].to_owned();
        let pinyin = strs[1].trim().split([',', ' ']).collect::<Vec<&str>>()[0].to_string();
        let pinyin = pinyin.chars().map(|c| sheng_diao(c)).collect::<String>();
        pinyin_map.insert(unicode, pinyin);
    }
    let unicode_values: Vec<String> = input
        .chars()
        .map(|c| format!("U+{:04X}", c as u32))
        .collect();
    let pinyin_values = unicode_values
        .iter()
        .map(|v| {
            if let Some(pinyin) = pinyin_map.get(v) {
                pinyin.clone()
            } else {
                "".to_string()
            }
        })
        .collect::<Vec<String>>();
    // dbg!(&pinyin_values);
    let wade_giles = pinyin_values
        .iter()
        .map(|s| pinyin_wade_giles(s).to_string())
        .collect::<Vec<String>>();
    let res = wade_giles.join(" ");
    let mut chars = res.chars();
    let res = match chars.next() {
        Some(c) => c.to_uppercase().collect::<String>() + chars.as_str(),
        None => "".to_string(),
    }; 
    res
}

fn sheng_diao(input: char) -> char {
    match input {
        'ā' | 'á' | 'ǎ' | 'à' => 'a',
        'ō' | 'ó' | 'ǒ' | 'ò' => 'o',
        'ē' | 'é' | 'ě' | 'è' => 'e',
        'ī' | 'í' | 'ǐ' | 'ì' => 'i',
        'ū' | 'ú' | 'ǔ' | 'ù' => 'u',
        'ǖ' | 'ǘ' | 'ǚ' | 'ǜ' => 'ü',
        _ => input,
    }
}

fn pinyin_wade_giles(s: &str) -> &str {
    match s {
        "a" => "a",
        "ai" => "ai",
        "an" => "an",
        "ang" => "ang",
        "ao" => "ao",
        "ba" => "pa",
        "bai" => "pai",
        "ban" => "pan",
        "bang" => "pang",
        "bao" => "pao",
        "bei" => "pei",
        "ben" => "pen",
        "beng" => "peng",
        "bi" => "pi",
        "bian" => "pien",
        "biao" => "piao",
        "bie" => "pieh",
        "bin" => "pin",
        "bing" => "ping",
        "bo" => "po",
        "bu" => "pu",
        "ca" => "ts'a",
        "cai" => "ts'ai",
        "can" => "ts'an",
        "cang" => "ts'ang",
        "cao" => "ts'ao",
        "ce" => "ts'e",
        "cen" => "ts'en",
        "ceng" => "ts'eng",
        "cha" => "ch'a",
        "chai" => "ch'ai",
        "chan" => "ch'an",
        "chang" => "ch'ang",
        "chao" => "ch'ao",
        "che" => "ch'e",
        "chen" => "ch'en",
        "cheng" => "ch'eng",
        "chi" => "ch'ih",
        "chong" => "ch'ung",
        "chou" => "ch'ou",
        "chu" => "ch'u",
        "chuai" => "ch'uai",
        "chuan" => "ch'uan",
        "chuang" => "ch'uang",
        "chui" => "ch'ui",
        "chun" => "ch'un",
        "chuo" => "ch'o",
        "ci" => "tz'u",
        "cong" => "ts'ung",
        "cou" => "ts'ou",
        "cu" => "ts'u",
        "cuan" => "ts'uan",
        "cui" => "ts'ui",
        "cun" => "ts'un",
        "cuo" => "ts'o",
        "da" => "ta",
        "dai" => "tai",
        "dan" => "tan",
        "dang" => "tang",
        "dao" => "tao",
        "de" => "te",
        "deng" => "teng",
        "di" => "ti",
        "dian" => "tien",
        "diao" => "tiao",
        "die" => "tieh",
        "ding" => "ting",
        "diu" => "tiu",
        "dong" => "tung",
        "dou" => "tou",
        "du" => "tu",
        "duan" => "tuan",
        "dui" => "tui",
        "dun" => "tun",
        "duo" => "to",
        "e" => "o",
        "en" => "en",
        "er" => "erh",
        "fa" => "fa",
        "fan" => "fan",
        "fang" => "fang",
        "fei" => "fei",
        "fen" => "fen",
        "feng" => "feng",
        "fo" => "fo",
        "fou" => "fou",
        "fu" => "fu",
        "ga" => "ka",
        "gai" => "kai",
        "gan" => "kan",
        "gang" => "kang",
        "gao" => "kao",
        "ge" => "ko",
        "gen" => "ken",
        "geng" => "keng",
        "gong" => "kung",
        "gou" => "kou",
        "gu" => "ku",
        "gua" => "kua",
        "guai" => "kuai",
        "guan" => "kuan",
        "guang" => "kuang",
        "gui" => "kuei",
        "gun" => "kun",
        "guo" => "kuo",
        "ha" => "ha",
        "hai" => "hai",
        "han" => "han",
        "hang" => "hang",
        "hao" => "hao",
        "he" => "ho",
        "hei" => "hei",
        "hen" => "hen",
        "heng" => "heng",
        "hong" => "hung",
        "hou" => "hou",
        "hu" => "hu",
        "hua" => "hua",
        "huai" => "huai",
        "huan" => "huan",
        "huang" => "huang",
        "hui" => "hui",
        "hun" => "hun",
        "huo" => "huo",
        "ji" => "chi",
        "jia" => "chia",
        "jian" => "chien",
        "jiang" => "chiang",
        "jiao" => "chiao",
        "jie" => "chieh",
        "jin" => "chin",
        "jing" => "ching",
        "jiong" => "chiung",
        "jiu" => "chiu",
        "ju" => "chü",
        "juan" => "chüan",
        "jue" => "chüeh",
        "jun" => "chün",
        "ka" => "k'a",
        "kai" => "k'ai",
        "kan" => "k'an",
        "kang" => "k'ang",
        "kao" => "k'ao",
        "ke" => "k'o",
        "ken" => "k'en",
        "keng" => "k'eng",
        "kong" => "k'ung",
        "kou" => "k'ou",
        "ku" => "k'u",
        "kua" => "k'ua",
        "kuai" => "k'uai",
        "kuan" => "k'uan",
        "kuang" => "k'uang",
        "kui" => "k'uei",
        "kun" => "k'un",
        "kuo" => "k'uo",
        "lü" => "lü",
        "la" => "la",
        "lai" => "lai",
        "lan" => "lan",
        "lang" => "lang",
        "lao" => "lao",
        "le" => "le",
        "lei" => "lei",
        "leng" => "leng",
        "li" => "li",
        "lian" => "lien",
        "liang" => "liang",
        "liao" => "liao",
        "lie" => "lieh",
        "lin" => "lin",
        "ling" => "ling",
        "liu" => "liu",
        "long" => "lung",
        "lou" => "lou",
        "lu" => "lu",
        "luan" => "luan",
        // "luan" => "lüan",
        "lue" => "lüeh",
        "lun" => "lun",
        "luo" => "lo",
        "ma" => "ma",
        "mai" => "mai",
        "man" => "man",
        "mang" => "mang",
        "mao" => "mao",
        "mei" => "mei",
        "men" => "men",
        "meng" => "meng",
        "mi" => "mi",
        "mian" => "mien",
        "miao" => "miao",
        "mie" => "mieh",
        "min" => "min",
        "ming" => "ming",
        "miu" => "miu",
        "mo" => "mo",
        "mou" => "mou",
        "mu" => "mu",
        "nü" => "nü",
        "na" => "na",
        "nai" => "nai",
        "nan" => "nan",
        "nang" => "nang",
        "nao" => "nao",
        "nei" => "nei",
        "nen" => "nen",
        "neng" => "neng",
        "ni" => "ni",
        "nian" => "nien",
        "niang" => "niang",
        "niao" => "niao",
        "nie" => "nieh",
        "nin" => "nin",
        "ning" => "ning",
        "niu" => "niu",
        "nong" => "nung",
        "nou" => "nou",
        "nu" => "nu",
        "nuan" => "nuan",
        "nue" => "nüeh",
        "nuo" => "no",
        "ou" => "ou",
        "pa" => "p'a",
        "pai" => "p'ai",
        "pan" => "p'an",
        "pang" => "p'ang",
        "pao" => "p'ao",
        "pei" => "p'ei",
        "pen" => "p'en",
        "peng" => "p'eng",
        "pi" => "p'i",
        "pian" => "p'ien",
        "piao" => "p'iao",
        "pie" => "p'ieh",
        "pin" => "p'in",
        "ping" => "p'ing",
        "po" => "p'o",
        "pou" => "p'ou",
        "pu" => "p'u",
        "qi" => "ch'i",
        "qia" => "ch'ia",
        "qian" => "ch'ien",
        "qiang" => "ch'iang",
        "qiao" => "ch'iao",
        "qie" => "ch'ieh",
        "qin" => "ch'in",
        "qing" => "ch'ing",
        "qiong" => "ch'iung",
        "qiu" => "ch'iu",
        "qu" => "ch'ü",
        "quan" => "ch'üan",
        "que" => "ch'üeh",
        "qun" => "ch'ün",
        "ran" => "jan",
        "rang" => "jang",
        "rao" => "jao",
        "re" => "je",
        "ren" => "jen",
        "reng" => "jeng",
        "ri" => "jih",
        "rong" => "jung",
        "rou" => "jou",
        "ru" => "ju",
        "ruan" => "juan",
        "rui" => "jui",
        "run" => "jun",
        "ruo" => "jo",
        "sa" => "sa",
        "sai" => "sai",
        "san" => "san",
        "sang" => "sang",
        "sao" => "sao",
        "se" => "se",
        "sen" => "sen",
        "seng" => "seng",
        "sha" => "sha",
        "shai" => "shai",
        "shan" => "shan",
        "shang" => "shang",
        "shao" => "shao",
        "she" => "she",
        "shen" => "shen",
        "sheng" => "sheng",
        "shi" => "shih",
        "shou" => "shou",
        "shu" => "shu",
        "shua" => "shua",
        "shuai" => "shuai",
        "shuan" => "shuan",
        "shuang" => "shuang",
        "shui" => "shui",
        "shun" => "shun",
        "shuo" => "shuo",
        "si" => "ssu",
        "song" => "sung",
        "sou" => "sou",
        "su" => "su",
        "suan" => "suan",
        "sui" => "sui",
        "sun" => "sun",
        "suo" => "so",
        "ta" => "t'a",
        "tai" => "t'ai",
        "tan" => "t'an",
        "tang" => "t'ang",
        "tao" => "t'ao",
        "te" => "t'e",
        "teng" => "t'eng",
        "ti" => "t'i",
        "tian" => "t'ien",
        "tiao" => "t'iao",
        "tie" => "t'ieh",
        "ting" => "t'ing",
        "tong" => "t'ung",
        "tou" => "t'ou",
        "tu" => "t'u",
        "tuan" => "t'uan",
        "tui" => "t'ui",
        "tun" => "t'un",
        "tuo" => "t'o",
        "wa" => "wa",
        "wai" => "wai",
        "wan" => "wan",
        "wang" => "wang",
        "wei" => "wei",
        "wen" => "wen",
        "weng" => "weng",
        "wo" => "wo",
        "wu" => "wu",
        "xi" => "hsi",
        "xia" => "hsia",
        "xian" => "hsien",
        "xiang" => "hsiang",
        "xiao" => "hsiao",
        "xie" => "hsieh",
        "xin" => "hsin",
        "xing" => "hsing",
        "xiong" => "hsiung",
        "xiu" => "hsiu",
        "xu" => "hsü",
        "xuan" => "hsüan",
        "xue" => "hsüeh",
        "xun" => "hsün",
        "ya" => "ya",
        "yai" => "yai",
        "yan" => "yen",
        "yang" => "yang",
        "yao" => "yao",
        "ye" => "yeh",
        "yi" => "i",
        "yin" => "yin",
        "ying" => "ying",
        "yo" => "yo",
        "yong" => "yung",
        "you" => "yu",
        "yu" => "yü",
        "yuan" => "yüan",
        "yue" => "yüeh",
        "yun" => "yün",
        "za" => "tsa",
        "zai" => "tsai",
        "zan" => "tsan",
        "zang" => "tsang",
        "zao" => "tsao",
        "ze" => "tse",
        "zei" => "tsei",
        "zen" => "tsen",
        "zeng" => "tseng",
        "zha" => "cha",
        "zhai" => "chai",
        "zhan" => "chan",
        "zhang" => "chang",
        "zhao" => "chao",
        "zhe" => "che",
        "zhen" => "chen",
        "zheng" => "cheng",
        "zhi" => "chih",
        "zhong" => "chung",
        "zhou" => "chou",
        "zhu" => "chu",
        "zhua" => "chua",
        "zhuai" => "chuai",
        "zhuan" => "chuan",
        "zhuang" => "chuang",
        "zhui" => "chui",
        _ => "",
    }
}
